import { createRoute } from "../create-matcher"

class Base {
  constructor(router) {
    this.router = router
    // 记录路由状态           第一次路由保证路由为空   path: '/'

    // 讲 current 属性变为响应式，如果在渲染 router-view 时候用到了 current，current变了就重新刷新
    this.current= createRoute(null, {path: '/'})
  }

  transitionTo(location, callback) { // 根据路径进行跳转
    // 根据路径匹配，匹配到对应的记录
    let record = this.router.match(location) /// 不要调用别的类中的属性，对外暴露处理自己属性的方法  返回 {path, matched}

    // 每次 record 发生变化 渲染页面   record 变为响应式
    // 跳转一次， 维护新的 路径信息
    this.current= createRoute(record, {path: location})
    
    // 改完路径，重新渲染  listen 方法 更新 _route
    this.cb && this.cb(this.current)

    callback && callback() // 默认只有第一次调用
  }

  listen(cb) {
    this.cb = cb
  }
}

export default Base